#!/usr/bin/env python3
"""
打包脚本 - 用于构建可执行文件
"""

import os
import sys
import shutil
import subprocess
from pathlib import Path


def build_executable():
    """构建可执行文件"""
    print("开始构建可执行文件...")

    # 检查 PyInstaller 是否可用
    try:
        import PyInstaller
    except ImportError:
        print("错误: 未安装 PyInstaller，请先安装: pip install pyinstaller")
        return False

    # 创建构建目录
    build_dir = Path("build")
    dist_dir = Path("dist")

    # 清理旧的构建文件
    if build_dir.exists():
        shutil.rmtree(build_dir)
    if dist_dir.exists():
        shutil.rmtree(dist_dir)

    # PyInstaller 配置
    spec = {
        'script': 'main.py',
        'name': 'AutoClicker',
        'icon': 'assets/icon.ico' if Path('assets/icon.ico').exists() else None,
        'onefile': True,
        'console': False,  # 不显示控制台窗口
        'add_data': [
            ('assets/icon.ico', 'assets'),
        ],
        'hidden_imports': [
            'pandas',
            'openpyxl',
            'PIL',
            'pyautogui',
            'keyboard',
            'pyperclip',
        ]
    }

    # 构建命令
    cmd = [
        'pyinstaller',
        '--name', spec['name'],
        '--onefile',
        '--windowed',  # 不显示控制台
        '--add-data', 'assets/icon.ico;assets' if os.name == 'nt' else 'assets/icon.ico:assets',
    ]

    # 添加图标
    if spec['icon']:
        cmd.extend(['--icon', spec['icon']])

    # 添加隐藏导入
    for imp in spec['hidden_imports']:
        cmd.extend(['--hidden-import', imp])

    cmd.append(spec['script'])

    try:
        # 执行构建命令
        print("执行构建命令:", ' '.join(cmd))
        result = subprocess.run(cmd, check=True, capture_output=True, text=True)

        if result.returncode == 0:
            print("构建成功！")
            print(f"可执行文件位置: {dist_dir / spec['name']}")
            return True
        else:
            print("构建失败:")
            print(result.stderr)
            return False

    except subprocess.CalledProcessError as e:
        print(f"构建过程出错: {e}")
        return False
    except Exception as e:
        print(f"构建过程中发生未知错误: {e}")
        return False


def create_installer():
    """创建安装程序（Windows）"""
    if os.name != 'nt':
        print("跳过安装程序创建（仅支持Windows）")
        return True

    print("创建安装程序...")

    # 这里可以集成 Inno Setup 或其他安装程序创建工具
    # 由于复杂性，这里只做简单演示
    print("安装程序创建功能待实现")
    return True


def main():
    """主函数"""
    print("=" * 50)
    print("   屏幕点击和输入工具 - 构建脚本")
    print("=" * 50)

    # 检查当前目录
    if not Path("main.py").exists():
        print("错误: 请在项目根目录运行此脚本")
        return 1

    # 构建可执行文件
    if not build_executable():
        return 1

    # 创建安装程序（可选）
    if os.name == 'nt':
        create_installer()

    print("构建完成！")
    return 0


if __name__ == "__main__":
    sys.exit(main())